home *** CD-ROM | disk | FTP | other *** search
/ LOGIC Apps / Logic-APPLE_II_APPS.iso / mac / LOGIC Apple II 5.25" Library - ProDOS / PRO018.dsk / LOGIC.GATES.bas < prev    next >
BASIC Source File  |  2012-02-16  |  6KB  |  171 lines

  1. 100  REM SIMPLE DIGITAL LOGIC
  2. 110  REM BRIEF TUTORIAL & QUIZ
  3. 120  REM 
  4. 130  REM   BY  KEITH FALKNER
  5. 140  REM       TORONTO CANADA
  6. 150  REM 
  7. 160  REM GIVE AWAY COPIES.
  8. 170  REM 
  9. 180  DATA 10: REM # OF CIRCUITS
  10. 190  DATA  5: REM # VARIETIES
  11. 200  REM 
  12. 210  REM FOR EACH CIRCUIT,
  13. 220  REM THE DATA SHOWS:
  14. 230  REM   ITS NAME
  15. 240  REM   # OF INPUTS
  16. 250  REM   # OF OUTPUTS
  17. 260  REM   TYPE OF CIRCUIT
  18. 270  REM   IS IT ON?
  19. 280  REM   # ACTIVE INPUTS
  20. 290  REM   # NEEDED TO TURN ON
  21. 300  REM   ON IF 0 ACTIVE IN?
  22. 310  REM   ON IF 1 ACTIVE IN?
  23. 320  REM   ON IF 2 ACTIVE IN?
  24. 330  REM 
  25. 340  DATA OR GATE,2,1,1,0,0,1 OR 2,N,Y,Y
  26. 350  DATA OR GATE,2,1,1,1,1 OR 2,0,N,Y,Y
  27. 360  DATA AND GATE,2,1,2,0,0 OR 1,2,N,N,Y
  28. 370  DATA AND GATE,2,1,2,1,2,0 OR 1,N,N,Y
  29. 380  DATA NOR GATE,2,1,3,0,1 OR 2,0,Y,N,N
  30. 390  DATA NOR GATE,2,1,3,1,0,1 OR 2,Y,N,N
  31. 400  DATA NAND GATE,2,1,4,0,2,0 OR 1,Y,Y,N
  32. 410  DATA NAND GATE,2,1,4,1,0 OR 1,2,Y,Y,N
  33. 420  DATA INVERTER,1,1,5,0,1,0,Y,N,X
  34. 430  DATA INVERTER,1,1,5,1,0,1,Y,N,X
  35. 440  DATA 4: REM  # MENU ITEMS
  36. 450  DATA EXPLAIN ALL THE CIRCUITS
  37. 460  DATA EXPLAIN A SELECTED CIRCUIT
  38. 470  DATA TEST YOUR DIGITAL LOGIC
  39. 480  DATA QUIT
  40. 490  TEXT : HOME : NORMAL : SPEED= 255
  41. 500  GR : VTAB 21: PRINT "    A   T U T O R I A L   A B O U T"
  42. 510 XL = 12:XR = 26:YA = 20: REM LOCATE THE PICTURES
  43. 520  READ Z:EN = Z: DIM EN$(Z),EI(Z),EO(Z),ET(Z),EV(Z),EA$(Z),ER$(Z),EY$(2,Z),EQ(Z)
  44. 530  READ T: DIM X1(T,16),X2(T,16)
  45. 540  FOR I = 1 TO EN: READ EN$(I),EI(I),EO(I),ET(I),EV(I),EA$(I),ER$(I)
  46. 550  FOR J = 0 TO 2: READ EY$(J,I): NEXT 
  47. 560 C = ET(I): FOR Y = 0 TO 16: ON C GOTO 570,590,570,590,610
  48. 570 X2(C,Y) = XR -Y ^4 *.0002 +.3
  49. 580 X1(C,Y) = XL -Y *Y *.02 +.4: NEXT : GOTO 630
  50. 590 X2(C,Y) = XR -Y ^6 *.0000007 +.3
  51. 600 X1(C,Y) = XL -2: NEXT : GOTO 630
  52. 610 X2(C,Y) = XR -Y
  53. 620 X1(C,Y) = XL -2: NEXT 
  54. 630  VTAB 23: IF EV(I)  THEN  INVERSE 
  55. 640  PRINT  TAB( 13)EN$(I)" (";
  56. 650  IF EV(I) = 0  THEN  PRINT "OFF";
  57. 660  IF EV(I) = 1  THEN  PRINT "ON";
  58. 670  PRINT ")" TAB( 39)" ": NORMAL 
  59. 680  GOSUB 1550
  60. 690  NEXT 
  61. 700  FOR I = 1 TO 2000: NEXT 
  62. 710  DEF  FN Q(Z) = 1 + INT(Z * RND(1))
  63. 720  READ MN: DIM MA$(MN),MC(MN)
  64. 730  FOR I = 1 TO MN: READ MA$(I): NEXT 
  65. 740  REM  M A I N   M E N U
  66. 750  TEXT : HOME : INVERSE : PRINT "       D I G I T A L   L O G I C       ": NORMAL 
  67. 760  VTAB 24: PRINT "   ('ESC' KEY RETURNS TO THIS MENU.)";: VTAB 3: PRINT 
  68. 770  PRINT : PRINT : FOR I = 1 TO MN
  69. 780  PRINT : PRINT  TAB( 4)I"   "MA$(I): PRINT : NEXT 
  70. 790  PRINT : PRINT : PRINT  TAB( 8)"SELECT 1 - "MN".";: HTAB 4
  71. 800  GET Z$:MA =  VAL(Z$)
  72. 810  IF MA <1  OR MA >MN GOTO 800
  73. 820  PRINT MA
  74. 830  ON MA GOTO 900,940,1060,1380
  75. 840  REM  CURSOR @ LOWER RIGHT
  76. 850  VTAB 24: HTAB 40
  77. 860  REM  GET A KEY
  78. 870  GET Z$:E = (Z$ =  CHR$(27))
  79. 880  RETURN 
  80. 890  REM  EXPLAIN ALL THE CIRCUITS
  81. 900  FOR I = 1 TO EN: GOSUB 1400
  82. 910  GOSUB 850: PRINT : HOME : IF E  THEN I = EN
  83. 920  NEXT : GOTO 750
  84. 930  REM  EXPLAIN ONE CIRCUIT
  85. 940  TEXT : HOME : PRINT "   SELECT ANY CIRCUIT:": PRINT : PRINT "(OR PRESS 'ESC' FOR MENU.)": PRINT : PRINT : PRINT 
  86. 950  FOR I = 1 TO EN: PRINT "   ";: INVERSE : PRINT  CHR$(64 +I);: NORMAL : PRINT "   "EN$(I);
  87. 960  IF EV(I) = 0  THEN  PRINT " (OFF";
  88. 970  IF EV(I) = 1  THEN  PRINT " (ON";
  89. 980  PRINT " STATE)": NEXT 
  90. 990  PRINT : PRINT : PRINT "       SELECT A-" CHR$(63 +I)".";: HTAB 4
  91. 1000  GOSUB 870: IF E  THEN  PRINT : GOTO 750
  92. 1010 I =  ASC(Z$) -64: IF I <1  OR I >EN GOTO 1000
  93. 1020  PRINT Z$: GOSUB 1400: GOSUB 850: PRINT 
  94. 1030  IF E GOTO 750
  95. 1040  GOTO 940
  96. 1050  REM  QUIZ
  97. 1060  FOR I = 1 TO EN:EQ(I) = 0: NEXT :EQ = 0
  98. 1070 I =  FN Q(EN): IF EQ(I) GOTO 1070
  99. 1080 EQ = EQ +1:EQ(I) = 1
  100. 1090  GOSUB 1560: HOME : PRINT "THIS IS A";
  101. 1100 Q1$ =  MID$ (EN$(I),1,1)
  102. 1110 Q2$ =  MID$ (EN$(I),2,1)
  103. 1120  IF Q1$ = "A"  OR Q1$ = "E"  OR Q1$ = "I"  OR Q1$ = "O"  OR Q1$ = "U"  THEN  PRINT "N";
  104. 1130  PRINT " ";
  105. 1140  GOSUB 870: IF E GOTO 750
  106. 1150  IF Z$ < >Q1$ GOTO 1140
  107. 1160  PRINT Z$;
  108. 1170  GOSUB 870: IF E GOTO 750
  109. 1180  IF Z$ < >Q2$ GOTO 1170
  110. 1190  PRINT  MID$ (EN$(I),2)".  IS IT ON? ";
  111. 1200 :Q$ =  MID$ ("NY",1 +EV(I),1)
  112. 1210  GOSUB 870: IF E GOTO 750
  113. 1220  IF Z$ < >Q$ GOTO 1210
  114. 1230  PRINT Z$".";
  115. 1240  FOR J = 0 TO 2:Q$ = EY$(J,I): IF Q$ = "X" GOTO 1330
  116. 1250  PRINT : PRINT "IS IT ON WHEN "J" INPUT";
  117. 1260  IF J < >1  THEN  PRINT "S ARE";
  118. 1270  IF J = 1  THEN  PRINT " IS";
  119. 1280  PRINT " ACTIVE? ";: CALL  -958
  120. 1290  GOSUB 870: IF E GOTO 750
  121. 1300  IF Z$ < >Q$ GOTO 1290
  122. 1310  PRINT Z$"!";
  123. 1320  FOR Z = 1 TO 400: NEXT 
  124. 1330  NEXT 
  125. 1340  GOSUB 850: IF E GOTO 750
  126. 1350  IF EQ = EN GOTO 750
  127. 1360  GOTO 1070
  128. 1370  REM  QUIT
  129. 1380  TEXT : HOME : PRINT  CHR$(4)"-STARTUP"
  130. 1390  REM EXPLAIN CIRCUIT # I
  131. 1400  GOSUB 1560: HOME : PRINT "THIS IS A";:T$ =  LEFT$(EN$(I),1)
  132. 1410  IF T$ = "A"  OR T$ = "E"  OR T$ = "I"  OR T$ = "O"  OR T$ = "U"  THEN  PRINT "N";
  133. 1420  PRINT " "EN$(I)".  IT IS ";
  134. 1430  IF EV(I) = 1  THEN Z$ = "ON":ZZ$ = "OFF"
  135. 1440  IF EV(I) = 0  THEN Z$ = "OFF":ZZ$ = "ON"
  136. 1450  PRINT Z$"."
  137. 1460  PRINT "THE DEVICE HAS ";
  138. 1470  PRINT EA$(I)" INPUT";
  139. 1480  IF EA$(I) < >"1"  THEN  PRINT "S";
  140. 1490  PRINT " ENERGIZED."
  141. 1500  PRINT "TURN IT "ZZ$" WITH ";
  142. 1510  PRINT ER$(I)" INPUT";
  143. 1520  IF ER$(I) < >"1"  THEN  PRINT "S";
  144. 1530  PRINT ".";
  145. 1540  RETURN 
  146. 1550  REM  DRAW CIRCUIT # I
  147. 1560  GR :Z = EV(I): COLOR= 4 +11 *Z
  148. 1570  REM  BLUE=OFF WHITE=ON
  149. 1580 C = ET(I): REM TYPE
  150. 1590  FOR Y = 0 TO 16
  151. 1600 X1 = X1(C,Y):X2 = X2(C,Y)
  152. 1610  HLIN X1,X2 AT YA -Y
  153. 1620  HLIN X1,X2 AT YA +Y
  154. 1630  NEXT 
  155. 1640 Y = YA: IF C < >5  THEN Y = YA -6
  156. 1650  VLIN Y -1,Y +1 AT XL -12
  157. 1660  VLIN Y -1,Y +1 AT XL -8
  158. 1670  HLIN XL -11,XL -9 AT Y -2
  159. 1680  HLIN XL -11,XL -9 AT Y +2
  160. 1690  HLIN XL -8,XL AT Y
  161. 1700  IF YA >Y  THEN Y = YA +YA -Y: GOTO 1650
  162. 1710  IF C <3  THEN  HLIN XR,XR +10 AT YA: GOTO 1770
  163. 1720  VLIN YA -1,YA +1 AT XR +1
  164. 1730  VLIN YA -1,YA +1 AT XR +5
  165. 1740  HLIN XR +2,XR +4 AT YA -2
  166. 1750  HLIN XR +2,XR +4 AT YA +2
  167. 1760  HLIN XR +5,XR +10 AT YA
  168. 1770  PLOT XR +10,YA -2: PLOT XR +10,YA +2
  169. 1780  VLIN YA -1,YA +1 AT XR +11
  170. 1790  PLOT XR +12,YA
  171. 1800  RETURN